import js from '@eslint/js';
import globals from 'globals';
import tseslint from 'typescript-eslint';
import pluginVue from 'eslint-plugin-vue';
import { defineConfig } from 'eslint/config';
import prettier from 'eslint-plugin-prettier';

export default defineConfig([
  // 针对 JavaScript、TypeScript 和 Vue 文件的基本配置
  {
    files: ['**/*.{js,mjs,cjs,ts,vue}'],
    plugins: { js, prettier },
    extends: ['js/recommended'],
    rules: {
      'no-var': 'error', // 禁止 var 的规则
      'no-multiple-empty-lines': ['error', { max: 1 }], // 不允许多个空行
      '@typescript-eslint/explicit-function-return-type': 'error', // 强制函数有返回值类型
      '@typescript-eslint/member-ordering': [
        'error',
        {
          default: {
            memberTypes: [
              'signature',
              'field',
              'constructor',
              ['get', 'set'],
              'method',
            ], // 强制成员顺序: 签名、字段、构造函数、get、set、方法
          },
        },
      ],
      'prettier/prettier': ['error'],
    },
  },

  // 对所有文件启用浏览器全局变量
  {
    files: ['**/*.{js,mjs,cjs,ts,vue}'],
    languageOptions: { globals: globals.browser }, // 启用浏览器环境下的全局变量
  },

  // 启用 TypeScript 推荐规则
  tseslint.configs.recommended, // 使用 `tseslint` 插件中的 TypeScript 推荐配置
  tseslint.configs.stylistic, // 使用 `tseslint` 插件中的 TypeScript 风格配置

  // 启用 Vue 的 flat/essential 配置
  pluginVue.configs['flat/essential'], // 使用 Vue 插件的 `flat/essential` 配置，通常启用 Vue 中的一些基本规则

  // 针对 `.vue` 文件，启用 TypeScript 的解析器
  {
    files: ['**/*.vue'],
    languageOptions: {
      parserOptions: { parser: tseslint.parser }, // 配置 `.vue` 文件使用 `tseslint` 的解析器进行解析
    },
  },
]);
